const fs = require("fs");
const path = require("path");

const _诗词类型 = {
  c: "曹操",
  n: "纳兰性德诗集",
  sj: "诗经",
  sm: "水墨唐诗",
  sc: "宋词三百首",
  t: "唐诗三百首",
  y: "元曲",
};

// 动态读取所有诗词文件
const 所有诗词数据 = {};

// 遍历 _诗词类型 对象，根据值来读取对应的文件
Object.keys(_诗词类型).forEach((key) => {
  const 文件名 = _诗词类型[key];
  try {
    const 文件路径 = path.join(__dirname, "../../资源/诗词", `${文件名}.json`);
    所有诗词数据[文件名] = JSON.parse(fs.readFileSync(文件路径, "utf8"));
  } catch (error) {
    console.error(`读取文件 ${文件名}.json 时出错:`, error.message);
    所有诗词数据[文件名] = []; // 如果读取失败，设置为空数组
  }
});

// 整合到一个变量中
const 所有诗词 = {};
Object.keys(所有诗词数据).forEach((诗词名) => {
  所有诗词[诗词名] = {
    内容: 所有诗词数据[诗词名],
    长度: 所有诗词数据[诗词名].length,
  };
});

// 输出所有诗词，每个元素中内容属性只输出第一个值
// console.log("所有诗词数据预览:");
// const 预览数据 = {};
// for (let k in 所有诗词) {
//   if (所有诗词.hasOwnProperty(k)) {
//     // 推荐：只遍历自身属性
//     预览数据[k] = {
//       内容: 所有诗词[k].内容[0],
//       长度: 所有诗词[k].长度,
//     };
//   }
// }
// console.log(预览数据);

module.exports = function fn处理诗词(_原始类型) {
  let _类型 = "";

  // 如果 _原始类型 的值在 _诗词类型 的属性名称中，_类型 取对应的值
  if (_原始类型 && Object.prototype.hasOwnProperty.call(_诗词类型, _原始类型)) {
    _类型 = _诗词类型[_原始类型];
  } else {
    // 如果 _原始类型 的值不在 _诗词类型 的属性名称中，_类型 取 _诗词类型 的随机值
    const 类型键列表 = Object.keys(_诗词类型);
    const 随机键 = 类型键列表[Math.floor(Math.random() * 类型键列表.length)];
    _类型 = _诗词类型[随机键];
  }

  const 随机索引 = Math.floor(Math.random() * 所有诗词[_类型].内容.length);
  const 随机诗词 = 所有诗词[_类型].内容[随机索引];

  // 在随机诗词中增加一个属性 内容文本
  const 完整诗词 = {
    诗词类型: _类型,
    ...随机诗词,
    内容文本: 随机诗词.内容.join("\n"),
    nrwb: 随机诗词.内容.join("\n"),
    zz:随机诗词.作者,
    cd:随机诗词.朝代,
    bt:随机诗词.标题,
    nr:随机诗词.内容,
    lx:随机诗词.类型,
    sx:随机诗词.赏析,
  };

  return 完整诗词;
};
